A. Graphical User Interface
On many modern computing systems, the Graphical User Interface (“GUI”) is the main mode of interaction for a user with any software. As opposed to command-line interfaces (“CLI”), GUIs provide a convenient, user-friendly environment for users to interact with computer systems. The typical GUI is made up of components that are visually perceived or interacted with by the end user, such as windows, icons, menus, and pointers. Users drag the mouse pointer, click buttons, and enter various keyboard combinations.
Although a component of a GUI may appear to the user as a single item, the component may actually consist of a number of separate components or sub-components that have been combined together. The typical GUI can support hundreds, if not thousands, of combinations of user control actions. For example, in a word processor, a user can point the mouse to select an item on the menu bar, to click an icon, or to highlight blocks of text on the viewer windows. Similarly, a user can use keyboard input to interact with a computer application. For instance, in a word processor, a user can enter “CTRL-C”, “CTRL-V”, or other predefined keyboard combinations to access program features. Based on the input from the mouse or keyboard, the computer executes the computer application to manipulate what is displayed on the screen as well as what is saved in files or actions taken by the computer application.
B. GUI Test Automation
To ensure a computer application meets its specifications, the computer application will go through GUI testing before being released. GUI testing is the process of testing a computer application that uses a graphical user interface for quality assurance by subjecting the computer application to a series of test cases. To generate a good set of test cases, the testers must be certain that their tests cover all functionality of the system and also has to ensure the test fully exercises the GUI. Ultimately, GUI tests are important because they are performed from the end-user's view of the application.
Manual GUI testing of modern computer applications is difficult, as it is almost impossible or impractical to test all possible GUI combinations every time the underlying code changes. Further, manual interaction with the GUI often results in mistakes. Thus, GUI test automation is strongly preferred, if not mandatory to ensure that all possible GUI combinations can be tested thoroughly and correctly. Automated tests enable testers to concentrate on testing new features, enabling developers to refactor and add new features without worrying about breaking existing functionality, and reducing the time to market.
However, current GUI test automation is inefficient. The current tools available to test GUI-based applications are either expensive or generic to record user actions on a graphic intensive GUI. Further, automated test cases require extensive programming and are highly susceptible to missed events or timing issues.
Thus, there is a need for an easier, cheaper, and better solution for GUI test automation. A good GUI test automation setup should be easy to use, easy to maintain, generate test scripts without too much effort from the tester, provide ways to verify the results of the test execution and interact only with the UI and preferably not with any underlying business logic.